iespazodamercefandomcom_gl-20200214-history
Xestión de certificados con OpenSSL
Xestión de certificados con OpenSSL en Ubuntu Server Pasos para crear e xestionar os nosos propios certificados dixitais Unha vez aclarados os conceptos básicos sobre os certificados dixitais, veremos que é o que imos facer no noso caso. Os pasos que seguiremos son os seguintes: * Crearemos unha autoridade de certificación (CA). * Crearemos unha solicitude de firma de certificado (CSR) para que a CA cree o certificado para o servidor (asociado ao nome DNS do servidor). * Xeraremos coa CA o certificado do servidor a partir da CSR. * Teremos que copiar no equipo cliente o certificado da CA, para que cando reciba o certificado do servidor confíe nel ao estar emitido por esa CA. Crear a Autoridade de Certificación (CA) Primeiro, creamos os directorios para almacenar os certificados da CA e os ficheiros relacionados: sudo mkdir /etc/ssl/CA sudo mkdir /etc/ssl/newcerts Creamos dous ficheiros que a CA precisará para manter un número de serie que lle asignará a cada certificado e almacenar os certificados emitidos: sudo sh -c "echo '01' > /etc/ssl/CA/serial" sudo touch /etc/ssl/CA/index.txt No ficheiro de configuración da CA /etc/ssl/openssl.cnf, modificaremos os seguintes parámetros dentro da sección [ CA_default]: dir = /etc/ssl/ # Where everything is kept database = $dir/CA/index.txt # database index file. certificate = $dir/certs/cacert.pem # The CA certificate serial = $dir/CA/serial # The current serial number Creamos o certificado raíz para a propia CA, que será firmado por si mesma: openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650 teremos que introducir un contrasinal para a CA (podemos poñer abc123.), e os datos do certificado. A continuación móstrase un exemplo para estes datos. É importante ter en conta que o que poñamos en Organization Name, deberá ser o mesmo valor que loo poñamos neste mesmo campo no certificado do servidor: Generating a 1024 bit RSA private key ......++++++ ........++++++ unable to write 'random state' writing new private key to 'cakey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) AU:ES State or Province Name (full name) Some-State:Galicia Locality Name (eg, city) []: Organization Name (eg, company) Widgits Pty Ltd:IES calquera Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:server00.iescalquera.local Email Address []: e instalamos nos directorios da CA tanto a chave privada como o certificado creado: sudo mv cakey.pem /etc/ssl/private/ sudo mv cacert.pem /etc/ssl/certs/ Xenerar a solicitude de firma do certificado (CSR) En primeiro lugar teremos que crear unha chave para xerar a CSR, que será almacenada no ficheiro server.key. Teremos que introducir un contrasinal que será necesario para abrir esta chave (Como exemplo, podemos poñer o mesmo contrasinal abc123.): openssl genrsa -des3 -out server.key 1024 O problema que temos con esta chave que acabamos de crear é que para poder abrila fai falta proporcionar o contrasinal que lle asignamos, e entón cada vez que se arrancara o servidor LDAP habería que introducir este contrasinal para que puidese ter acceso á chave privada do servidor, e isto supón un problema xa que calquera reinicio do servizo obriga a unha intervención manual. Por iso, o que imos facer é crear a partir da chave xa creada unha chave que non requira contrasinal: openssl rsa -in server.key -out server.key.insecure E gardamos en server.key a chave sen contrasinal, que será a que usaremos: mv server.key server.key.secure mv server.key.insecure server.key E por último creamos o CSR: openssl req -new -key server.key -out server.csr Introduciremos os datos necesarios para a solicitude do certificado, destacando o Organization Name, que deberá coincidir co que introducimos para a CA, e o Common Name, que deberá ser o nome DNS do servidor para o que emitiremos o certificado: Country Name (2 letter code) AU:ES State or Province Name (full name) Some-State:Galicia Locality Name (eg, city) []: Organization Name (eg, company) Widgits Pty Ltd:IES calquera Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:server00.iescalquera.local Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: A CSR será almacenada no ficheiro server.csr, que xa pode ser enviada á autoridade de certificación para que xenere o certificado. Xerar o certificado a partir do CSR Ah!! pero se a autoridade de certificación tamén somos nós!! Ben, pois imos crear un certificado a partir da CSR: sudo openssl ca -in server.csr -config /etc/ssl/openssl.cnf Primeiro pedirásenos o contrasinal da CA (o que asignamos cando creamos o certificado da CA, no noso caso abc123.), e a continuación mostrásenos os datos do certificado que se vai xerar (tomados da CSR): Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Mar 4 23:25:23 2010 GMT Not After : Mar 4 23:25:23 2011 GMT Subject: countryName = ES stateOrProvinceName = Galicia organizationName = IES calquera commonName = server00.iescalquera.local X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: DF:FC:73:0D:36:B0:AF:DA:47:F7:E3:57:F9:41:FD:FF:88:AF:17:AE X509v3 Authority Key Identifier: keyid:01:C8:B2:AD:1B:B7:86:45:3E:CA:37:CC:C1:95:8E:A8:22:C3:D1:9B Certificate is to be certified until Mar 4 23:25:23 2011 GMT (365 days) E procedemos a asinar... (respondemos que si (y) ás dúas preguntas de confirmación). Listo!! Copiamos todo o texto entre as liñas -----BEGIN CERTIFICATE----- and ----END CERTIFICATE----- (incluíndo estas dúas liñas), e o pegamos no ficheiro server.crt. Por exemplo, este ficheiro pode conter algo así: -----BEGIN CERTIFICATE----- MIICpzCCAhCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQGEwJFUzEQ MA4GA1UECBMHR2FsaWNpYTEVMBMGA1UEChMMSUVTIGNhbHF1ZXJhMSMwIQYDVQQD ExpzZXJ2ZXIwMC5pZXNjYWxxdWVyYS5sb2NhbDAeFw0xMDAzMDQyMzI1MjNaFw0x MTAzMDQyMzI1MjNaMFsxCzAJBgNVBAYTAkVTMRAwDgYDVQQIEwdHYWxpY2lhMRUw EwYDVQQKEwxJRVMgY2FscXVlcmExIzAhBgNVBAMTGnNlcnZlcjAwLmllc2NhbHF1 ZXJhLmxvY2FsMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/QWqoi12reBRA /3p6+KyWTAoN3XqLU8VaNhpAAP4LTRuuzeeCKxkPyj2QZk+rWehmqkqbwX6Zdrqi BSfeKuoRokTV7e2bbMJmaomEbvez5bwr7sDSXl2UyFhVyJWtQBkI8m2pkqjWt9Fn 2OotV+c43HNncXN3/mGoVwpE7OMivwIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCG SAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4E FgQU3/xzDTawr9pH9+NX+UH9/4ivF64wHwYDVR0jBBgwFoAUAciyrRu3hkU+yjfM wZWOqCLD0ZswDQYJKoZIhvcNAQEFBQADgYEAVHDWexRWbz6nPWVA+x/4KaXA9KaE atZ1cu2Mep+29duZyAFcQEf4pivXCallmkmbAhurpUH61SLFHOb7YHl71EPLvru0 U3kDx48wSDGqBzdCKWhoh1SBrFryxlovEredZ44q/1AxldJ8py9r77e2kqJ7u+TC 6v0/CnJRUYvWZh0= -----END CERTIFICATE----- Copiamos o certificado e a chave ao directorio de almacenamento da CA: sudo cp server.crt /etc/ssl/certs sudo cp server.key /etc/ssl/private Máis información * Xestión de certificados con Ubuntu Server * Xestión de certificados con Zentyal